// 路由处理函数

// 导入数据库操作模块
const db = require('../db/index')

// bcryptjs 加密
const bcrypt = require('bcryptjs')

// Token 字符串
const jwt = require('jsonwebtoken')
// 导入配置文件
const config = require('../config')

// 注册用户处理函数
exports.regUser = (req, res) => {
  const userinfo = req.body
  // 判断是否合法
  // if(!userinfo.username || !userinfo.password) {
  //   return res.send ({status: 1, message: '用户或密码不能为空'})
  // }
  
  // TODO:
  // 2.定义 SQL 语句
  const sql = `select * from ev_users where username=?`
  // 3.执信 sql 语句 判断用户名是否被占用
  db.query(sql, [userinfo.username], function(err, results) {
    // 执行 sql 语句失败
    if(err) {
      // return res.send({ status: 1, message: err.message})
      return res.cc(err)
    }
    // 用户名被占用
    if(results.length > 0) {
      // return res.send({ status: 1, message: '用户名被占用, 请更环其他'})
      
      return res.cc('用户名被占用, 请更环其他')
    } 

    // TODO：用户名可用 继续后流程

    // 调用 bcrypt.hashSync() 对密码进行加密
    userinfo.password = bcrypt.hashSync(userinfo.password,10)

    // 插入用户 
    // 1.定义 sql 语句
    const sql = 'insert into ev_users set ?'
    // 2.调用执行 sql 语句 插入新用户
    db.query(sql, {username: userinfo.username,password:userinfo.password}, function(err, results) {
      // 执行 SQL 语句失败
      // if(err) return res.send({status: 1,message: err.message })
      if(err) return res.cc(err)
      // sql 语句成功 单影响行数不等于1
      if(results.affectedRows !== 1) {
        // return res.send({ status: 1, message:'注册新用户失败，请稍后再试！'})
        return res.cc('注册新用户失败，请稍后再试！')
      }
      // 注册成功
      // res.send({ status: 0, message: '注册成功！'})
      res.cc('注册成功！', 0)
    })

  })



}

// 登录的处理函数
exports.login = (req, res) => {
  // 1.接受表单数据
  const userinfo = req.body
  // 2.定义sql语句
  const sql = `select * from ev_users where username=?`
  // 执行sql语句 查询用户数据
  db.query(sql, userinfo.username,(err,results) => {
    // 执行sql语句失败
    if(err) return res.cc(err)
    // 执行sql语句成功 但查询到数据不等于1
    if(results.length !== 1) return res.cc('登陆失败！')
    // TODO： 判断用户输入登陆的密码是否和数据库一直
    const compareResult = bcrypt.compareSync(userinfo.password, results[0].password)

    // 如果对比结果等于 false 则用户输入密码错误
    if(!compareResult) {
      return res.cc('登陆失败！')
    }
    // TODO：登陆成功，生成TOKEN 字符串
    const user = {...results[0],password:'',user_pic:''}
    // console.log(user)
    // 对用户信息加密 生成 token 字符串
    const tokenStr = jwt.sign(user,config.jwtSecretKey,{expiresIn: config.expiresIn})

    // 调用 res.send() 响应给客户端
    res.send({
      status: 0,
      message: '登陆成功！',
      token: 'Bearer ' + tokenStr
    })
  })
}